iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0
Python

Python x OpenCV系列 第 3

[Day 03] 影像處理 - 強度變換 Intensity Transform

  • 分享至 

  • xImage
  •  

Python 影像處理 OpenCV 模組中的 Intensity Transform 原理與使用方法

影像處理中的強度變換(Intensity Transform)是對影像中的每個像素進行操作,根據其灰度或亮度值轉換來改變影像的對比度、亮度或其他視覺特性。這些變換通常應用於增強影像品質,使其更易於分析。OpenCV 是 Python 中一個常用的影像處理模組,它提供了豐富的工具來進行各種強度變換操作,如線性變換、對數變換和伽馬校正等。

強度變換的原理

  1. 線性變換(Linear Transform)

    • 線性變換是將每個像素的強度值按比例進行放大或縮小,這種方式可以改變整體亮度或對比度。
    • 基本公式為:output = α * input + β,其中 α 控制對比度,β 控制亮度。
  2. 對數變換(Logarithmic Transform)

    • 對數變換適用於擴展影像中低亮度像素的值,從而提升暗部細節。
    • 公式為:output = c * log(1 + input),其中 c 是常數。
  3. 伽馬校正(Gamma Correction)

    • 伽馬校正常用於調整影像的亮度和對比度。透過調整不同的伽馬值,可以對影像的亮暗進行控制。
    • 公式為:output = input^γ,其中 γ 值通常在 0.5 到 2.5 之間,γ < 1 會增加亮度,γ > 1 會使影像變暗。

使用方法

在 OpenCV 中,這些強度變換可以輕鬆實現,以下是一些具體的範例程式碼來解釋這些轉換如何在實際中使用。

範例 1:線性變換

線性變換可以用來調整影像的對比度與亮度。

import cv2
import numpy as np

# 讀取影像
image = cv2.imread('Lenna.jpg', cv2.IMREAD_GRAYSCALE)

# 定義對比度與亮度係數
alpha = 1.5  # 對比度控制
beta = 50    # 亮度控制

# 進行線性變換
adjusted = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)

# 顯示結果
cv2.imshow('Original Image', image)
cv2.imshow('Adjusted Image', adjusted)
cv2.waitKey(0)
cv2.destroyAllWindows()

在這個範例中,我們使用 cv2.convertScaleAbs() 函數來調整影像的亮度和對比度。調整後的影像會顯示出更高的亮度與對比。

範例 2:對數變換

對數變換常用於增強影像的暗部細節。

import cv2
import numpy as np

# 讀取影像
image = cv2.imread('Lenna.jpg', cv2.IMREAD_GRAYSCALE)

# 進行對數變換
c = 255 / np.log(1 + np.max(image))
log_transformed = c * (np.log(1 + image))

# 轉換為可顯示的格式
log_transformed = np.array(log_transformed, dtype=np.uint8)

# 顯示結果
cv2.imshow('Original Image', image)
cv2.imshow('Log Transformed Image', log_transformed)
cv2.waitKey(0)
cv2.destroyAllWindows()

這段程式碼展示了如何對影像進行對數變換,透過對低亮度區域進行擴展,來提升影像中暗部的細節。

範例 3:伽馬校正

伽馬校正適合用於控制影像的亮度,特別是在處理過暗或過亮的影像時。

import cv2
import numpy as np

# 讀取影像
image = cv2.imread('Lenna.jpg', cv2.IMREAD_GRAYSCALE)

# 定義伽馬值
gamma = 2.2

# 建立查找表
lookUpTable = np.empty((1,256), np.uint8)
for i in range(256):
    lookUpTable[0,i] = np.clip(pow(i / 255.0, gamma) * 255.0, 0, 255)

# 應用伽馬校正
gamma_corrected = cv2.LUT(image, lookUpTable)

# 顯示結果
cv2.imshow('Original Image', image)
cv2.imshow('Gamma Corrected Image', gamma_corrected)
cv2.waitKey(0)
cv2.destroyAllWindows()

在這個範例中,我們應用了伽馬校正,並通過調整伽馬值來控制影像的亮度。較高的伽馬值會使影像變得更暗,而較低的伽馬值會增加亮度。

Intensity Transform 的應用

強度變換廣泛應用於影像增強、物件檢測、醫學影像分析等領域。例如,在醫學影像中,對數變換可以用來強化 X 光片中的暗部細節,使得病灶更加明顯。而在攝影圖像後製中,伽馬校正經常用來調整照片的曝光,以達到最佳的視覺效果。

總結

強度變換(Intensity Transform)是影像處理中的一個基礎且重要的技術,用於改變影像的亮度、對比度和細節呈現。透過 OpenCV 提供的工具,我們可以輕鬆地實現各種強度變換,如線性變換、對數變換和伽馬校正等。這些技術不僅適用於影像的增強,還能幫助我們更好地理解和處理影像中的重要資訊。


上一篇
[Day 02] 色彩模式與顏色偵測
下一篇
[Day04] Numpy簡介與OpenCV影像裁剪
系列文
Python x OpenCV5
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言